Enums (Enumeration) কী?
রাস্টে Enums (এনাম) হল একটি ডেটা টাইপ যা একাধিক ভিন্ন ধরনের মানকে একটি টাইপের অধীনে গ্রুপ করে। এটি একটি ধরনের ডেটা ক্লাসিফিকেশন যা একাধিক সম্ভাব্য মান ধারণ করতে পারে, তবে একটি মাত্র মান গ্রহণ করে। সাধারণত এনাম ব্যবহার করা হয় যখন আপনার প্রোগ্রামে নির্দিষ্ট কিছু কনস্ট্যান্ট বা সম্ভাব্য মান থাকতে পারে এবং আপনাকে সেই মানগুলোর মধ্যে একটি নির্বাচন করতে হবে।
রাস্টে, Enums ভেরিয়েবলগুলির জন্য আরও শক্তিশালী এবং লজিক্যাল ডেটা টাইপের ধারণা তৈরি করতে সাহায্য করে।
Enums এর মৌলিক সিনট্যাক্স
রাস্টে একটি এনাম তৈরি করতে enum কিওয়ার্ড ব্যবহার করা হয়। এর পরে আপনি এনামের নাম এবং তার মধ্যে সম্ভাব্য ভিন্ন ভিন্ন মান (variants) উল্লেখ করেন।
উদাহরণ:
enum Direction {
Up,
Down,
Left,
Right,
}এখানে, Direction একটি এনাম, যা চারটি ভিন্ন ভিন্ন মান ধারণ করে:
UpDownLeftRight
Enums এর ব্যবহার
এনাম ব্যবহারের অন্যতম সুবিধা হল, এটি কোডের পাঠযোগ্যতা এবং জটিলতা কমিয়ে আনে, কারণ আপনি সহজেই নির্দিষ্ট মান গুলোর সাথে কাজ করতে পারেন। এছাড়া, এনাম দিয়ে আপনি টাইপ সেফটি নিশ্চিত করতে পারেন, অর্থাৎ এনাম এমনভাবে তৈরি হয় যে ভুল টাইপের মান ব্যবহার করার সুযোগ থাকে না।
উদাহরণ:
fn move_player(direction: Direction) {
match direction {
Direction::Up => println!("Player moves up"),
Direction::Down => println!("Player moves down"),
Direction::Left => println!("Player moves left"),
Direction::Right => println!("Player moves right"),
}
}
fn main() {
let direction = Direction::Up;
move_player(direction);
}ব্যাখ্যা:
এখানে, move_player ফাংশনটি Direction এনাম গ্রহণ করে এবং match স্টেটমেন্টের মাধ্যমে প্রত্যেকটি ভিন্ন মানের জন্য আলাদা কোড এক্সিকিউট করে। এনাম ব্যবহার করার মাধ্যমে আপনি সহজেই Up, Down, Left, বা Right এর মধ্যে নির্বাচন করতে পারেন, এবং কোডটি টাইপ সেফও থাকে।
বিভিন্ন ধরনের এনাম ভ্যালু (Enums with Data)
রাস্টে এনামের মানগুলি শুধুমাত্র কনস্ট্যান্ট (constant) হিসেবে সীমাবদ্ধ নয়। আপনি এনাম ভ্যারিয়েবলগুলোর সাথে ডেটা যুক্ত করতে পারেন। এটি এনামকে আরও শক্তিশালী এবং নমনীয় করে তোলে।
উদাহরণ:
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn process_message(message: Message) {
match message {
Message::Quit => println!("Quit message"),
Message::Move { x, y } => println!("Move to coordinates: ({}, {})", x, y),
Message::Write(text) => println!("Writing message: {}", text),
Message::ChangeColor(r, g, b) => println!("Changing color to RGB: ({}, {}, {})", r, g, b),
}
}
fn main() {
let msg = Message::Move { x: 10, y: 20 };
process_message(msg);
}ব্যাখ্যা:
এখানে, Message এনামটির চারটি ভিন্ন ভ্যালু রয়েছে:
Quit(কোনো ডেটা নেই)Move { x, y }(স্ট্রাকচারাল ডেটা ধারণ করে)Write(একটি স্ট্রিং ধারণ করে)ChangeColor(তিনটি পূর্ণসংখ্যা ধারণ করে)
process_message ফাংশনে match ব্যবহার করে প্রত্যেকটি এনাম ভ্যালুর জন্য আলাদা কোড পরিচালনা করা হয়েছে। এনামের ভ্যালু Move এ x এবং y এর মান ধারণ করে, অন্যদিকে Write একটি স্ট্রিং গ্রহণ করে।
Enums এবং Option টাইপ
রাস্টে একটি বিশেষ ধরনের এনাম হল Option টাইপ, যা কোনো মানের উপস্থিতি বা অনুপস্থিতি নির্দেশ করে। এটি দুটি ভ্যালু ধারণ করে: Some(T) (যেখানে T কোনো টাইপ হতে পারে) এবং None (যেখানে কোন মান নেই)।
উদাহরণ:
fn find_item(index: usize) -> Option<&'static str> {
let items = ["apple", "banana", "orange"];
if index < items.len() {
Some(items[index])
} else {
None
}
}
fn main() {
match find_item(1) {
Some(item) => println!("Item found: {}", item),
None => println!("Item not found"),
}
}ব্যাখ্যা:
এখানে, find_item ফাংশন একটি Option টাইপ রিটার্ন করে, যা Some(item) বা None হতে পারে। match স্টেটমেন্টের মাধ্যমে আমরা চেক করি যে ফলস্বরূপ কী পাওয়া গেছে।
সারাংশ
রাস্টের Enums একটি অত্যন্ত শক্তিশালী ডেটা টাইপ, যা প্রোগ্রামিংয়ের বিভিন্ন সমস্যা সমাধান করতে সাহায্য করে। এটি সিস্টেমের মধ্যে সীমিত মানের সেট তৈরি করতে সাহায্য করে এবং কোডের সুরক্ষা এবং পাঠযোগ্যতা বৃদ্ধি করে। এনাম এর মাধ্যমে আপনি বিভিন্ন ধরনের ডেটা গ্রুপ করতে পারেন এবং টাইপ সেফটি বজায় রেখে কোড লিখতে পারেন।
Read more